package com.xp.dto;

import lombok.Data;
import java.util.List;
import java.util.Map;

/**
 * LogicFlow流程图数据DTO
 * 
 * @author xp
 * @since 2025-01-01
 */
@Data
public class LogicFlowData {

    /**
     * 节点列表
     */
    private List<Node> nodes;
    
    /**
     * 连线列表
     */
    private List<Edge> edges;

    /**
     * 流程数据
     */
    private FlowData flowData;

    /**
     * 流程数据
     */
    @Data
    public static class FlowData {
        /**
         * 节点列表
         */
        private List<Node> nodes;
        
        /**
         * 连线列表
         */
        private List<Edge> edges;
    }

    /**
     * 节点信息
     */
    @Data
    public static class Node {
        /**
         * 节点ID
         */
        private String id;
        
        /**
         * 节点类型
         */
        private String type;
        
        /**
         * X坐标
         */
        private Double x;
        
        /**
         * Y坐标
         */
        private Double y;
        
        /**
         * 节点属性配置
         */
        private Map<String, Object> properties;
        
        /**
         * 节点文本信息
         */
        private Text text;
    }

    /**
     * 连线信息
     */
    @Data
    public static class Edge {
        /**
         * 连线ID
         */
        private String id;
        
        /**
         * 连线类型
         */
        private String type;
        
        /**
         * 源节点ID
         */
        private String sourceNodeId;
        
        /**
         * 目标节点ID
         */
        private String targetNodeId;
        
        /**
         * 起始点坐标
         */
        private Point startPoint;
        
        /**
         * 结束点坐标
         */
        private Point endPoint;
        
        /**
         * 连线属性配置
         */
        private Map<String, Object> properties;
        
        /**
         * 路径点列表
         */
        private List<Point> pointsList;
    }

    /**
     * 文本信息
     */
    @Data
    public static class Text {
        /**
         * X坐标
         */
        private Double x;
        
        /**
         * Y坐标
         */
        private Double y;
        
        /**
         * 文本值
         */
        private String value;
    }

    /**
     * 坐标点
     */
    @Data
    public static class Point {
        /**
         * X坐标
         */
        private Double x;
        
        /**
         * Y坐标
         */
        private Double y;
    }
}